package com.wxwyapp.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;
import com.frame.ar.vo.CommReuslt;
import com.frame.config.ParamsConfig;
import com.frame.jfinal.controller.BaseController;
import com.jfinal.aop.Before;
import com.jfinal.aop.ClearInterceptor;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import com.justep.baas.data.Table;
import com.justep.baas.data.Transform;
import com.weixin.interceptor.WeiXinLoinInterceptor;
import com.weixin.model.AppUser;
import com.wxwyapp.config.DBSource;
import com.wxwyapp.service.UserService;
import com.wxwyapp.service.WeX5WxWyUserService;

/**
 * 作用描述：网欣业务app根请求
 * @author LRC
 * @createDate 2015年9月28日
 * @version v1.0 
 * @updateRecord 格式：时间，作者，修改说明
 **
 * 使用com.alibaba.fastjson.JSONObject
 */
@Before(WeiXinLoinInterceptor.class)
public class UserContoller extends BaseController {

	/**
	 * 功能描述：用户中心首页
	 * @createDate 2015年10月12日 by LRC 
	 * @updateRecord 格式：时间，作者，修改说明
	 **
	 * 
	 */
	public void index(){
		//render("index.html");
		//获取登录的微信用户信息
		AppUser user = getSessionAttr("appUser");
		//获取人员的类型
		Integer type = user!=null ? user.getInt("personType") : 0;
		//重定向到app界面
		String url = ParamsConfig.getInstance().getValue("WebApp.URL");
		
		//redirect(url);
		render("pubIndex.html");
	}
	
	/**
	 * 功能描述：跳转到登录主页
	 * @createDate 2015年9月28日 by LRC 
	 * @updateRecord 格式：时间，作者，修改说明
	 **
	 * 
	 */
	public void toLogin(){
		//TODO 暂无，不用登录
		
	}
	
	/**
	 * 功能描述：跳转到绑定微信账号界面
	 * @createDate 2015年9月28日 by LRC 
	 * @updateRecord 格式：时间，作者，修改说明
	 **
	 * 
	 */
	@ClearInterceptor
	public void toBindWeiXin(){
//		Object redirectUrl = getAttr("redirectUrl");
//		Object openId = getAttr("openId");
//		System.out.println(redirectUrl);
//		System.out.println(openId);
		render("bindWeiXin.html");
	}
	
	/**
	 * 功能描述：提交绑定微信账号信息
	 * @createDate 2015年9月28日 by LRC 
	 * @updateRecord 格式：时间，作者，修改说明
	 **
	 * 
	 */
	@ClearInterceptor
	public void bindWeiXin(){
		//获取参数信息
		String _param = getPara("param");
		JSONObject param = (JSONObject) JSONObject.parse(_param);
		String openId = param.getString("openId");
		//查询对应的bind用户
		AppUser appUser = AppUser.dao.getBindUserByOpenId(openId);
		if(appUser==null){
			actionResult(false, "未找到当前登录的微信账号");
			return;
		}
		//复制参数值
		String[] keys = new String[]{"personName","idCard","telephone"};
		appUser.copyValue(keys, param);
		//空值判定
		
		//进行绑定校验及数据保存
		Boolean result = UserService.wyUserBindWeiXin(appUser);
		if(result){
			actionResult(true, "绑定成功！");
			//设置session
			setSessionAttr("appUser", appUser);
		}else{
			actionResult(false, "绑定失败，请联系客户核对个人信息！");
		}
	}
	
	
	/**
	 * 功能描述：通过code获取登录用户信息
	 * @createDate 2015-10-16 by LRC 
	 * @updateRecord 格式：时间，作者，修改说明
	 **
	 * 
	 */
	public void getAppUserByCode(){
		
		//code实际为用户的openId
		String code = getPara("code");
		
		AppUser user = null;
		
		//从session中获取用户信息返回
		
		user = getSessionAttr("appUser");
		
		System.out.println(user);
		
		if(user==null){
			commResult(CommReuslt.ERROR, null);
			return;
		}
		
		//从pms获取用户的所属机构信息
		Record person = AppUser.dao.getPMSPersonInfo(user.get("personId"));
		
		Map<String,Object> data = new HashMap<String,Object>();
		
		/**
		 * 人员id，人员编号，人员项目，员工编号
		 * 人员类型，1普通住户，2员工，3员工即住户
		 */
		data.put("openId", user.getStr("openId"));
		data.put("personId", user.getStr("personId"));
		data.put("personNo", user.getStr("personNo"));
		data.put("personName", user.getStr("personName"));
		data.put("personType", user.getInt("personType"));
		data.put("employeeSID", user.getStr("employeeSID"));
		data.put("idCard", user.getStr("idCard"));
		data.put("telephone", user.getStr("telephone"));
		data.put("token", user.getStr("loginToken"));
		
		data.put("orgCode", person.getStr("orgCode"));
		data.put("areaCode", person.getStr("areaCode"));
		data.put("areaName", person.getStr("areaName"));
		
		commResult(CommReuslt.OK, data);
	}
	
	/**
	 * 功能描述：用户采用微信信息登录
	 * @createDate 2015年10月17日 by LRC 
	 * @updateRecord 格式：时间，作者，修改说明
	 **
	 * 
	 */
	@ClearInterceptor
	public void loginByToken(){
		
		/**
		 * 获取微信用户的openId
		 */
		String openId = getPara("openId");
		/**
		 * 微信登录后的token
		 */
		String loginToken = getPara("token");
		
		AppUser appUser = AppUser.dao.getUserByToken(openId, loginToken);
		
		if(appUser!=null){
			actionResult(true, "登录成功");
			//设置session
			setSessionAttr("appUser", appUser);
		}else{
			actionResult(false, "登录失败");
		}
		
	}
	
	/**
	 * 功能描述：变更用户信息
	 * @createDate 2015年10月18日 by LRC 
	 * @updateRecord 格式：时间，作者，修改说明
	 **
	 * 
	 */
	public void changeUserInfo(){
		String arg = null;
		Boolean result = false;
		switch(getAction()){
			case "telephone"://提交变更申请
				arg = getPara("telephone");
				result = UserService.changeUserPhone(arg);
				actionResult(result);
				break;
			default:
				actionResult(false, "未找到对应的处理操作");
				break;
		}
	}
	
	
	/**
	 * 功能描述：查询用户信息
	 * @createDate 2015年10月18日 by LRC 
	 * @updateRecord 格式：时间，作者，修改说明
	 **
	 * 
	 */
	public void getAppUser(){
		
		Table table = WeX5WxWyUserService.queryUserData(this);
		
		JSONObject json = Transform.tableToJson(table);
		
		renderText(json.toString());
	}
	
	/**
	 * 功能描述：查询用户所属小区
	 * @createDate 2015年10月19日 by LRC 
	 * @updateRecord 格式：时间，作者，修改说明
	 **
	 * 
	 */
	public void getAreaInfo(){
		AppUser user = AppUser.getCurrentUser();
		System.out.println(user);
		Object id = user.get("personId");
		switch (getAction()) {
		case "byTenement"://通过用户的住房号查询小区信息
			String sql = "select distinct a.code,a.name from pms_bi_house b "
					+ " join pms_bi_person p on p.id=b.tenementId "
					+ " join pms_bi_mgrarea a on a.code=b.areaCode "
					+ " where p.id=?";
			List<Record> as = Db.use(DBSource.PMS2_PMS).find(sql, id);
			renderJson(as);
			break;
			
		default:
			renderError(404);
			break;
		}
		
	}
}
